package ncme.auto.framework.core.services.Impl.mian;

import ncme.auto.framework.core.callback.AutoProcessControllerPart;
import ncme.auto.framework.core.entities.aspect.parameter.ServiceInfo;
import ncme.auto.framework.core.services.Impl.base.BaseAutoEntityServiceImpl;

import java.util.ArrayList;
import java.util.List;

public abstract class AutoEntityServiceImpl<E> extends BaseAutoEntityServiceImpl<E> {

    public abstract void customService(AutoProcessControllerPart autoProcessControllerPart, ServiceInfo serviceInfo) throws Throwable;

    /**
     * 除了id、唯一字段、组合唯一字段，其他想要加入 redis 的需要实现此方法
     */
    public void addEntityOtherToRedis(E entity) {
    }

    /**
     * 需要实现与添加 redis 方法对应的删除操作
     */
    public void delEntityOtherFromRedis(E entity) {
    }

    /**
     * 加入哪些字段进入 set 类型的redis
     * key 对应 该列表中的field，value对应 id
     * 使用时super.getFieldsForExtraRedisSet 后再添加
     * 该函数体内可预制字段
     */
    public List<String> getFieldsForExtraRedisSet() {
        return new ArrayList<>();
    }

    /**
     * 加入哪些字段 添加 单识别字段的redis操作
     * 例如：实体中已有@VerifyMultiRepetitionField注解，但其中一个字段需要单独添加id和ids redis内容
     * 使用时super.getFieldsForExtraRedisSingleVerify 后再添加
     */
    public List<String> getFieldsForExtraRedisSingleVerify() {
        return new ArrayList<>();
    }

}
